-- *****************************************************************************
-- *                                                    *     _       _        *
-- *  AdaDecoupe                                        *    / \   __| | __ _  *
-- *  http://code.google.com/p/adadecoupe/              *   / _ \ / _` |/ _` | *
-- *  Radim Badsi & Célia Biguzzi - IG3                 *  / ___ \ (_| | (_| | *
-- *  Polytech'Montpellier                              * /_/   \_\__,_|\__,_| *
-- *                                                    *                      *
-- *****************************************************************************
-- *                                                                           *
-- * plaques.ads  -  Plaques                                                   *
-- * Représentation d'une plaque de verre.                                     *
-- *                                                                           *
-- *****************************************************************************

with Util; use Util;
with SList;
with Categories; use Categories;
with Liste_Categories;
with Pieces;
with Emplacements;

package Plaques is
	type Plaque is private;

	function Get_Id (P : Plaque) return Natural;
	function Get_Position (P : Plaque) return Dimension;
	procedure Set_Position (P : in out Plaque; Position : in Dimension);
	function Get_Taille (P : Plaque) return Dimension;
	procedure Set_Taille (P : in out Plaque; Taille : in Dimension);
	
	function Get_Categorie (P : Plaque) return Categories.Ptr_Categorie;
	
    function Creer (Id : Natural;
    				Cat : Categorie_Verre) return Plaque;
                    
    function Creer (Mere : Plaque;
    				Taille : Dimension;
    				Position : Dimension) return Plaque;
    
    function Creer (Piece_Mere : Pieces.Piece) return Plaque;
    				
	function Est_Valide (P : Plaque) return Boolean;

	function Peut_Accueillir (P : Plaque; Piece : Pieces.Piece) return Boolean;
	
	function Comparer (A,B : Plaque) return Boolean;
	
	function ToString (P : Plaque) return String;
private
	type Plaque is
	record
		Id : Natural; -- Numero de la plaque
		Cat : Categories.Ptr_Categorie;
		Taille : Dimension; -- Taille initiale (avant decoupe)
		Position : Dimension; -- Position sur la plaque initiale
		-- Agregation Id&Position --> Identifiant unique
	end record;	
end Plaques;